home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / pluginy Firefox / 722 / 722.xpi / chrome / noscript.jar / content / noscript / noscriptBM.js < prev    next >
Text File  |  2010-02-12  |  5KB  |  142 lines

  1. /***** BEGIN LICENSE BLOCK *****
  2.  
  3. NoScript - a Firefox extension for whitelist driven safe JavaScript execution
  4. Copyright (C) 2004-2009 Giorgio Maone - g.maone@informaction.com
  5.  
  6. Contributors: 
  7.   Hwasung Kim
  8.  
  9. This program is free software; you can redistribute it and/or modify
  10. it under the terms of the GNU General Public License as published by
  11. the Free Software Foundation; either version 2 of the License, or
  12. (at your option) any later version.
  13.  
  14. This program is distributed in the hope that it will be useful,
  15. but WITHOUT ANY WARRANTY; without even the implied warranty of
  16. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  17. GNU General Public License for more details.
  18.  
  19. You should have received a copy of the GNU General Public License
  20. along with this program; if not, write to the Free Software
  21. Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  22.  
  23. ***** END LICENSE BLOCK *****/
  24.  
  25. var noscriptBM = {
  26.   openOneBookmarkOriginal: null,
  27.   openOneBookmark: function (aURI, aTargetBrowser, aDS) {
  28.     var ncNS = typeof(gNC_NS) == "undefined" ? ( typeof(NC_NS) == "undefined" ?
  29.       "http://home.netscape.com/NC-rdf#" : NC_NS ) : gNC_NS;
  30.     const url = BookmarksUtils.getProperty(aURI, ncNS+"URL", aDS);
  31.     
  32.     var openCallback = function(url) {
  33.       noscriptBM.openOneBookmarkOriginal.apply(BookmarksCommand, [aURI, aTargetBrowser, aDS]);
  34.     };
  35.   
  36.     if(!noscriptBM.handleBookmark(url, openCallback)) {
  37.       openCallback();
  38.     }
  39.   },
  40.   
  41.   handleURLBarCommandOriginal: null,
  42.   handleURLBarCommand: function() { // Fx 3.0 command bar interception
  43.     if(!(window.gURLBar && gURLBar.value))
  44.       return;
  45.    
  46.     var originalArguments = arguments;
  47.     var callback = function() { noscriptBM.handleURLBarCommandOriginal.apply(window, originalArguments); };
  48.     
  49.     var shortcut = gURLBar.value;
  50.     var jsrx = /^\s*(?:data|javascript):/i;
  51.     var isJS = jsrx.test(shortcut);
  52.     var allowJS = noscriptUtil.service.getPref("allowURLBarJS", true);
  53.     
  54.     if (isJS && allowJS) {
  55.       if (noscriptUtil.service.executeJSURL(shortcut, callback)) return;
  56.     } else if (window.getShortcutOrURI && (shortcut.indexOf(" ") > 0  && !isJS || shortcut.indexOf(":") < 0)) {
  57.       var url = getShortcutOrURI(shortcut, {});
  58.       if(jsrx.test(url) && noscriptBM.handleBookmark(url, callback))
  59.         return;
  60.     }
  61.     
  62.     callback();
  63.   },
  64.   
  65.   loadURI: function() { // Fx 3.5 command bar interception
  66.     try {
  67.       if ("gURLBar" in window) {
  68.         var handleCommand = window.gURLBar.handleCommand;
  69.         var times = 5;
  70.         for(var caller, f = arguments.callee; (caller = f.caller) && times; f = caller, times--) {
  71.           if (caller === handleCommand) {
  72.             return noscriptBM.handleURLBarCommand.apply(window, arguments);
  73.           }
  74.         }
  75.       }
  76.     } catch(e) {}
  77.     return noscriptBM.handleURLBarCommandOriginal.apply(window, arguments);
  78.   },
  79.  
  80.   handleBookmark: function(url, openCallback) {
  81.     return noscriptUtil.service.handleBookmark(url, openCallback);
  82.   },
  83.   
  84.   patchPlacesMethod: function(k, m) {
  85.     if(m in k) {
  86.       // Dirty eval hack due to Tab Mix Plus conflict: http://tmp.garyr.net/forum/viewtopic.php?t=8052
  87.       k[m] = eval(k[m].toSource()
  88.         .replace(/\b\w+\.checkURLSecurity\(/, 'noscriptBM.checkURLSecurity('))
  89.     }
  90.   },
  91.   
  92.   checkURLSecurity: function(node) {
  93.     var patch = arguments.callee;
  94.     if(!noscriptBM.placesUtils.checkURLSecurity(node)) return false;
  95.     if(patch._reentrant) return true;
  96.     try {
  97.       patch._reentrant = true;
  98.       const url = node.uri;
  99.       node = null;
  100.       var self = this;
  101.       return !noscriptBM.handleBookmark(url, function(url) {
  102.         patch.caller.apply(self, patch.caller.arguments);
  103.         self = null;
  104.       });
  105.     } finally {
  106.       patch._reentrant = false;
  107.     }
  108.   },
  109.   
  110.   onLoad: function(ev) {
  111.     ev.currentTarget.removeEventListener("load", arguments.callee, false);
  112.     if(!noscriptUtil.service) return;
  113.     
  114.     // patch bookmark clicks
  115.     if("BookmarksCommand" in window && !noscriptBM.openOneBookmarkOriginal) { 
  116.       noscriptBM.openOneBookmarkOriginal = BookmarksCommand.openOneBookmark;
  117.       BookmarksCommand.openOneBookmark = noscriptBM.openOneBookmark;
  118.     }
  119.     
  120.     // patch URLBar for keyword-triggered bookmarklets
  121.     if("handleURLBarCommand" in window && !noscriptBM.handleURLBarCommandOriginal) { // Fx 3.0
  122.       noscriptBM.handleURLBarCommandOriginal = window.handleURLBarCommand;
  123.       window.handleURLBarCommand = noscriptBM.handleURLBarCommand;
  124.     } else { // Fx 3.5
  125.       noscriptBM.handleURLBarCommandOriginal = window.loadURI;
  126.       window.loadURI = noscriptBM.loadURI;
  127.     }
  128.     var pu = window.PlacesUIUtils || window.PlacesUtils || false;
  129.     if (typeof(pu) == "object" && !noscriptBM.placesUtils) {
  130.       noscriptBM.placesUtils = pu;
  131.       window.setTimeout(function() {
  132.         var methods = ["openNodeIn", "openSelectedNodeWithEvent"];
  133.         for each (method in methods)
  134.           noscriptBM.patchPlacesMethod(pu, method);
  135.       }, 0);
  136.     }
  137.   }
  138. };
  139.  
  140. window.addEventListener("load", noscriptBM.onLoad, false);
  141.  
  142.